package reesoft.certificate;

/**
 * OpenSSL 动态库封装类
 * 使用前要把动态库放在可加载到的地方，例如 Windows 系统把 OpenSSL4J.dll 放在 Path 环境变量包含的目录之一下，
 * Linux 系统把 libOpenSSL4J.so 放在 LD_LIBRARY_PATH 环境变量包含的目录之一下
 *
 * Created by reesoft on 2017-08-29
 */
public class OpenSslWrapper
{
    static
    {
        System.loadLibrary("OpenSSL4J");
    }

    // 加载私钥（暂时只支持 BASE64 编码）到内存以加快使用效率
    // 参数值不可以是 null，否则会引起程序崩溃
    public native static int LoadPrivateKeyFromFile(String privateKeyFilePath, String privateKeyPassword);

    // 加载公钥、数字证书（暂时只支持 BASE64 编码）到内存以加快使用效率
    // 参数值不可以是 null，否则会引起程序崩溃
    public native static int LoadPublicKeyFromFile(String publicKeyFilePath);

    // 释放内存中的公、私钥
    public native static int FreeKey(int keyID);

    // 给数据签名
    // 参数值不可以是 null，否则会引起程序崩溃
    // 返回 BASE64 编码形式的签名字符串
    public native static String SignData(int keyID, String inputData);

    // 计算数据的哈希码并签名
    // 参数值不可以是 null，否则会引起程序崩溃
    public native static String HashAndSignData(int keyID, String inputData);

    // 验证数据的签名
    // 参数值不可以是 null，否则会引起程序崩溃
    public native static int VerifySignData(int keyID, String data, String signature);

    // 计算数据的哈希码并验证数据的签名
    // 参数值不可以是 null，否则会引起程序崩溃
    public native static int HashAndVerifySignData(int keyID, String data, String signature);
}
